home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / tree / DefaultTreeCellEditor.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  7.2 KB  |  295 lines

  1. package javax.swing.tree;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Font;
  7. import java.awt.Rectangle;
  8. import java.awt.event.ActionEvent;
  9. import java.awt.event.ActionListener;
  10. import java.awt.event.MouseEvent;
  11. import java.io.IOException;
  12. import java.io.ObjectInputStream;
  13. import java.io.ObjectOutputStream;
  14. import java.io.Serializable;
  15. import java.util.EventObject;
  16. import java.util.Vector;
  17. import javax.swing.DefaultCellEditor;
  18. import javax.swing.Icon;
  19. import javax.swing.JTree;
  20. import javax.swing.SwingUtilities;
  21. import javax.swing.Timer;
  22. import javax.swing.UIManager;
  23. import javax.swing.border.Border;
  24. import javax.swing.event.CellEditorListener;
  25. import javax.swing.event.TreeSelectionEvent;
  26. import javax.swing.event.TreeSelectionListener;
  27.  
  28. public class DefaultTreeCellEditor implements ActionListener, TreeCellEditor, TreeSelectionListener {
  29.    protected TreeCellEditor realEditor;
  30.    protected DefaultTreeCellRenderer renderer;
  31.    protected Container editingContainer;
  32.    protected transient Component editingComponent;
  33.    protected boolean canEdit;
  34.    protected transient int offset;
  35.    protected transient JTree tree;
  36.    protected transient TreePath lastPath;
  37.    protected transient Timer timer;
  38.    protected transient int lastRow;
  39.    protected Color borderSelectionColor;
  40.    protected transient Icon editingIcon;
  41.    protected Font font;
  42.  
  43.    public DefaultTreeCellEditor(JTree var1, DefaultTreeCellRenderer var2) {
  44.       this(var1, var2, (TreeCellEditor)null);
  45.    }
  46.  
  47.    public DefaultTreeCellEditor(JTree var1, DefaultTreeCellRenderer var2, TreeCellEditor var3) {
  48.       this.renderer = var2;
  49.       this.realEditor = var3;
  50.       if (this.realEditor == null) {
  51.          this.realEditor = this.createTreeCellEditor();
  52.       }
  53.  
  54.       this.editingContainer = this.createContainer();
  55.       this.setTree(var1);
  56.       this.setBorderSelectionColor(UIManager.getColor("Tree.editorBorderSelectionColor"));
  57.    }
  58.  
  59.    public void actionPerformed(ActionEvent var1) {
  60.       if (this.tree != null && this.lastPath != null) {
  61.          this.tree.startEditingAtPath(this.lastPath);
  62.       }
  63.  
  64.    }
  65.  
  66.    public void addCellEditorListener(CellEditorListener var1) {
  67.       this.realEditor.addCellEditorListener(var1);
  68.    }
  69.  
  70.    protected boolean canEditImmediately(EventObject var1) {
  71.       if (var1 instanceof MouseEvent && SwingUtilities.isLeftMouseButton((MouseEvent)var1)) {
  72.          MouseEvent var2 = (MouseEvent)var1;
  73.          return var2.getClickCount() > 2 && this.inHitRegion(var2.getX(), var2.getY());
  74.       } else {
  75.          return var1 == null;
  76.       }
  77.    }
  78.  
  79.    public void cancelCellEditing() {
  80.       this.realEditor.cancelCellEditing();
  81.       if (this.editingComponent != null) {
  82.          this.editingContainer.remove(this.editingComponent);
  83.       }
  84.  
  85.       this.editingComponent = null;
  86.    }
  87.  
  88.    protected Container createContainer() {
  89.       return new EditorContainer(this);
  90.    }
  91.  
  92.    protected TreeCellEditor createTreeCellEditor() {
  93.       Border var1 = UIManager.getBorder("Tree.editorBorder");
  94.       1 var2 = new 1(new DefaultTextField(this, var1));
  95.       ((DefaultCellEditor)var2).setClickCountToStart(1);
  96.       return var2;
  97.    }
  98.  
  99.    protected void determineOffset(JTree var1, Object var2, boolean var3, boolean var4, boolean var5, int var6) {
  100.       if (this.renderer != null) {
  101.          if (var5) {
  102.             this.editingIcon = this.renderer.getLeafIcon();
  103.          } else if (var4) {
  104.             this.editingIcon = this.renderer.getOpenIcon();
  105.          } else {
  106.             this.editingIcon = this.renderer.getClosedIcon();
  107.          }
  108.  
  109.          if (this.editingIcon != null) {
  110.             this.offset = this.renderer.getIconTextGap() + this.editingIcon.getIconWidth();
  111.          } else {
  112.             this.offset = this.renderer.getIconTextGap();
  113.          }
  114.       } else {
  115.          this.editingIcon = null;
  116.          this.offset = 0;
  117.       }
  118.  
  119.    }
  120.  
  121.    public Color getBorderSelectionColor() {
  122.       return this.borderSelectionColor;
  123.    }
  124.  
  125.    public Object getCellEditorValue() {
  126.       return this.realEditor.getCellEditorValue();
  127.    }
  128.  
  129.    public Font getFont() {
  130.       return this.font;
  131.    }
  132.  
  133.    public Component getTreeCellEditorComponent(JTree var1, Object var2, boolean var3, boolean var4, boolean var5, int var6) {
  134.       this.setTree(var1);
  135.       this.lastRow = var6;
  136.       this.determineOffset(var1, var2, var3, var4, var5, var6);
  137.       this.editingComponent = this.realEditor.getTreeCellEditorComponent(var1, var2, var3, var4, var5, var6);
  138.       TreePath var7 = var1.getPathForRow(var6);
  139.       this.canEdit = this.lastPath != null && var7 != null && this.lastPath.equals(var7);
  140.       Font var8 = this.getFont();
  141.       if (var8 == null) {
  142.          if (this.renderer != null) {
  143.             var8 = this.renderer.getFont();
  144.          }
  145.  
  146.          if (var8 == null) {
  147.             var8 = ((Component)var1).getFont();
  148.          }
  149.       }
  150.  
  151.       this.editingContainer.setFont(var8);
  152.       return this.editingContainer;
  153.    }
  154.  
  155.    protected boolean inHitRegion(int var1, int var2) {
  156.       if (this.lastRow != -1 && this.tree != null) {
  157.          Rectangle var3 = this.tree.getRowBounds(this.lastRow);
  158.          if (var3 != null && var1 <= var3.x + this.offset && this.offset < var3.width - 5) {
  159.             return false;
  160.          }
  161.       }
  162.  
  163.       return true;
  164.    }
  165.  
  166.    public boolean isCellEditable(EventObject var1) {
  167.       boolean var2 = false;
  168.       if (!this.realEditor.isCellEditable(var1)) {
  169.          return false;
  170.       } else {
  171.          if (this.canEditImmediately(var1)) {
  172.             var2 = true;
  173.          } else if (this.canEdit && this.shouldStartEditingTimer(var1)) {
  174.             this.startEditingTimer();
  175.          } else if (this.timer != null && this.timer.isRunning()) {
  176.             this.timer.stop();
  177.          }
  178.  
  179.          if (var2) {
  180.             this.prepareForEditing();
  181.          }
  182.  
  183.          return var2;
  184.       }
  185.    }
  186.  
  187.    protected void prepareForEditing() {
  188.       this.editingContainer.add(this.editingComponent);
  189.    }
  190.  
  191.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  192.       var1.defaultReadObject();
  193.       Vector var2 = (Vector)var1.readObject();
  194.       int var3 = 0;
  195.       int var4 = var2.size();
  196.       if (var3 < var4 && var2.elementAt(var3).equals("realEditor")) {
  197.          ++var3;
  198.          this.realEditor = (TreeCellEditor)var2.elementAt(var3);
  199.          ++var3;
  200.       }
  201.  
  202.    }
  203.  
  204.    public void removeCellEditorListener(CellEditorListener var1) {
  205.       this.realEditor.removeCellEditorListener(var1);
  206.    }
  207.  
  208.    public void setBorderSelectionColor(Color var1) {
  209.       this.borderSelectionColor = var1;
  210.    }
  211.  
  212.    public void setFont(Font var1) {
  213.       this.font = var1;
  214.    }
  215.  
  216.    protected void setTree(JTree var1) {
  217.       if (this.tree != var1) {
  218.          if (this.tree != null) {
  219.             this.tree.removeTreeSelectionListener(this);
  220.          }
  221.  
  222.          this.tree = var1;
  223.          if (this.tree != null) {
  224.             this.tree.addTreeSelectionListener(this);
  225.          }
  226.  
  227.          if (this.timer != null) {
  228.             this.timer.stop();
  229.          }
  230.       }
  231.  
  232.    }
  233.  
  234.    public boolean shouldSelectCell(EventObject var1) {
  235.       return this.realEditor.shouldSelectCell(var1);
  236.    }
  237.  
  238.    protected boolean shouldStartEditingTimer(EventObject var1) {
  239.       if (var1 instanceof MouseEvent && SwingUtilities.isLeftMouseButton((MouseEvent)var1)) {
  240.          MouseEvent var2 = (MouseEvent)var1;
  241.          return var2.getClickCount() == 1 && this.inHitRegion(var2.getX(), var2.getY());
  242.       } else {
  243.          return false;
  244.       }
  245.    }
  246.  
  247.    protected void startEditingTimer() {
  248.       if (this.timer == null) {
  249.          this.timer = new Timer(1200, this);
  250.          this.timer.setRepeats(false);
  251.       }
  252.  
  253.       this.timer.start();
  254.    }
  255.  
  256.    public boolean stopCellEditing() {
  257.       if (this.realEditor.stopCellEditing()) {
  258.          if (this.editingComponent != null) {
  259.             this.editingContainer.remove(this.editingComponent);
  260.          }
  261.  
  262.          this.editingComponent = null;
  263.          return true;
  264.       } else {
  265.          return false;
  266.       }
  267.    }
  268.  
  269.    public void valueChanged(TreeSelectionEvent var1) {
  270.       if (this.tree != null) {
  271.          if (this.tree.getSelectionCount() == 1) {
  272.             this.lastPath = this.tree.getSelectionPath();
  273.          } else {
  274.             this.lastPath = null;
  275.          }
  276.       }
  277.  
  278.       if (this.timer != null) {
  279.          this.timer.stop();
  280.       }
  281.  
  282.    }
  283.  
  284.    private void writeObject(ObjectOutputStream var1) throws IOException {
  285.       Vector var2 = new Vector();
  286.       var1.defaultWriteObject();
  287.       if (this.realEditor != null && this.realEditor instanceof Serializable) {
  288.          var2.addElement("realEditor");
  289.          var2.addElement(this.realEditor);
  290.       }
  291.  
  292.       var1.writeObject(var2);
  293.    }
  294. }
  295.